#include"comm.hpp"

extern Log log;
int main()
{
    Init init;        //必须先processa先执行，因为processa.cc创建了管道文件，如果processb.cc先执行的话，则processb打开管道文件会失败
    //创建共享内存
    int shmid=CreateShm();
    //挂接
    char* shmaddr=(char*)shmat(shmid,nullptr,0);

    int fd=open(FIFO_FILE,O_RDONLY);   //O_RDONLY:只读方式打开文件。会等待写入方打开之后，自己才会打开，向后执行，写端不开，则open阻塞----先写后读。

    //ipc code
    //一旦有人把数据写入到共享内存，其实我们立马能看到了！！
    //不需要经过系统调用，直接就能看到数据了！
    while(true)
    {
        char c;
        ssize_t s = read(fd, &c, 1);  //如果写端没写，则读端会阻塞在这里
        if(s==0)    //此时写端关闭，读端会读到文件尾，放回0
        {
            break;
        }
        else if(s<0)    
            break;
        
        //到这就说明：read读到东西了，证明那边已经写了内容了，可以开始读了

        sleep(2);
        cout<<"client say :"<<shmaddr<<endl;  //共享区被当作字符串
        //cout<<shmaddr<<endl;
    }

  
    //解除挂接
    int k=shmdt(shmaddr);
    //删除共享内存
    shmctl(shmid,IPC_RMID,nullptr);
  

    return 0;
}